CFLAGS= -Wall -Wextra -g -O2
LDFLAGS=-lfl -ly
CC=gcc
LLAS=llvm-as
LLC=llc
LLASFLAGS=-f

default: all

all: rubic print.o

lex.yy.c: scanner.l
	flex $<

y.tab.c: parse.y util.h
	yacc -d $<

y.tab.o: y.tab.c y.tab.h
	$(CC) $(CFLAGS) -c $<

lex.yy.o: lex.yy.c
	$(CC) $(CFLAGS) -c $<

util.o: util.c util.h
	$(CC) $(CFLAGS) -c $<

print.o: print.c
	$(CC) $(CFLAGS) -c $<

rubic: y.tab.o lex.yy.o util.o
	$(CC) -o $@ $^ $(LDFLAGS)

test.s: test.bc
	$(LLC) $< -o $@

test.ll: test.rb rubic
	./rubic < $< > $@

test.bc: test.ll
	$(LLAS) $< $(LLASFLAGS) -o $@

test: test.s print.o
	$(CC) $(CFLAGS) $^ -o $@

clean:
	rm -f *.o *.tab.* *.yy.* *~ test.s test.ll test.bc

mrproper: clean
	rm -f rubic test
